﻿
using System;
using System.Runtime.InteropServices;

namespace UBCon.Core
{
    public static class NativeMethods
    {
        [DllImport(Constants._USER_32_DLL, SetLastError = true)]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport(Constants._USER_32_DLL, CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

        [DllImport(Constants._USER_32_DLL, EntryPoint = "ClientToScreen", SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto)]
        public static extern int ClientToScreen(IntPtr hWnd, [In, Out] POINT pt);

        [DllImport(Constants._GDI32_DLL, SetLastError = true)]
        public static extern IntPtr CreateRectRgn(int left, int top, int right, int bottom);

        [DllImport(Constants._USER_32_DLL)]
        public static extern int SetWindowRgn(IntPtr hWnd, IntPtr hRgn, [MarshalAs(UnmanagedType.Bool)] bool bRedraw);

        [return: MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
        [DllImport(Constants._USER_32_DLL)]
        public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

        [return: MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
        [DllImport(Constants._USER_32_DLL)]
        public static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);

        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport(Constants._USER_32_DLL)]
        public static extern bool IsWindowVisible(IntPtr hwnd);

        [DllImport(Constants._GDI32_DLL)]
        public static extern IntPtr CreateRoundRectRgn(int x1, int y1, int x2, int y2, int cx, int cy);

        [DllImport(Constants._GDI32_DLL, SetLastError = true)]
        public static extern int CombineRgn(IntPtr hrgnDest, IntPtr hrgnSrc1, IntPtr hrgnSrc2, int fnCombineMode);

        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport(Constants._USER_32_DLL, SetLastError = true)]
        public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, SWP uFlags);

        [DllImport(Constants._USER_32_DLL, EntryPoint = "DefWindowProcW", CharSet = CharSet.Unicode)]
        public static extern IntPtr DefWindowProc(IntPtr hWnd, WindowMessages Msg, IntPtr wParam, IntPtr lParam);

        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport(Constants._DWMAPI_DLL)]
        public static extern bool DwmDefWindowProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, out System.IntPtr plResult);

        [DllImport(Constants._DWMAPI_DLL, PreserveSig = false)]
        public static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS pMarInset);

        [DllImport(Constants._DWMAPI_DLL, PreserveSig = false)]
        public static extern bool DwmIsCompositionEnabled();

        [DllImport(Constants._USER_32_DLL, ExactSpelling = true, CharSet = CharSet.Auto)]
        public static extern IntPtr GetCapture();

        [DllImport(Constants._USER_32_DLL)]
        public static extern int SetWindowLong(IntPtr hwnd, int index, int value);

        [DllImport(Constants._USER_32_DLL)]
        public static extern int GetWindowLong(IntPtr hwnd, int index);

        [DllImport(Constants._USER_32_DLL)]
        public static extern int UpdateWindow(IntPtr hwnd);

        [StructLayout(LayoutKind.Sequential)]
        public struct WINDOWPOS
        {
            public System.IntPtr hwnd;
            public System.IntPtr hwndInsertAfter;
            public int x;
            public int y;
            public int cx;
            public int cy;
            public int flags;
        }

        [DllImport(Constants._USER_32_DLL)]
        public static extern bool GetMonitorInfo(IntPtr hMonitor, MONITORINFO lpmi);

        [DllImport(Constants._USER_32_DLL)]
        public static extern int GetSystemMetrics(int index);
        /// <summary>
        /// 
        /// </summary>
        [DllImport(Constants._USER_32_DLL)]
        public static extern IntPtr MonitorFromWindow(IntPtr handle, int flags);

        public static int SignedLoWord(int i)
        {
            return (short)(i & 0xffff);
        }


        public static int SignedHiWord(int i)
        {
            return (short)(i >> 0x10);
        }

        public enum SystemCommands:int
        {
            /// <summary>
            /// Closes the window.
            /// </summary>
            SC_CLOSE = 0xF060,

            /// <summary>
            /// Changes the cursor to a question mark with a pointer. If the user then clicks a control in the dialog box, the control receives a WM_HELP message.
            /// </summary>
            SC_CONTEXTHELP = 0xF180,

            /// <summary>
            /// Selects the default item; the user double-clicked the window menu.
            /// </summary>
            SC_DEFAULT = 0xF160,

            /// <summary>
            /// Activates the window associated with the application-specified hot key. The lParam parameter identifies the window to activate.
            /// </summary>
            SC_HOTKEY = 0xF150,

            /// <summary>
            /// Scrolls horizontally.
            /// </summary>
            SC_HSCROLL = 0xF080,

            /// <summary>
            /// Indicates whether the screen saver is secure.
            /// </summary>
            SCF_ISSECURE = 0x00000001,

            /// <summary>
            /// Retrieves the window menu as a result of a keystroke. For more information, see the Remarks section.
            /// </summary>
            SC_KEYMENU = 0xF100,

            /// <summary>
            /// Maximizes the window.
            /// </summary>
            SC_MAXIMIZE = 0xF030,

            /// <summary>
            /// Minimizes the window.
            /// </summary>
            SC_MINIMIZE = 0xF020,

            /// <summary>
            /// Sets the state of the display. This command supports devices that have power-saving features, such as a battery-powered personal computer.
            /// </summary>
            SC_MONITORPOWER = 0xF170,

            /// <summary>
            /// Retrieves the window menu as a result of a mouse click.
            /// </summary>
            SC_MOUSEMENU = 0xF090,

            /// <summary>
            /// Moves the window.
            /// </summary>
            SC_MOVE = 0xF010,

            /// <summary>
            /// Moves to the next window.
            /// </summary>
            SC_NEXTWINDOW = 0xF040,

            /// <summary>
            /// Moves to the previous window.
            /// </summary>
            SC_PREVWINDOW = 0xF050,

            /// <summary>
            /// Restores the window to its normal position and size.
            /// </summary>
            SC_RESTORE = 0xF120,

            /// <summary>
            /// Executes the screen saver application specified in the [boot] section of the System.ini file.
            /// </summary>
            SC_SCREENSAVE = 0xF140,

            /// <summary>
            /// Sizes the window.
            /// </summary>
            SC_SIZE = 0xF000,

            /// <summary>
            /// Activates the Start menu.
            /// </summary>
            SC_TASKLIST = 0xF130,

            /// <summary>
            /// Scrolls vertically.
            /// </summary>
            SC_VSCROLL = 0xF070
        }

        /// <summary>
        /// A window receives this message when the user chooses a command from the Window menu (formerly known as the system or control menu) or when the user chooses the maximize button, minimize button, restore button, or close button.
        /// </summary>
        public enum WindowMessages : int
        {
            WM_NULL = 0x0000,
            WM_CREATE = 0x0001,
            WM_DESTROY = 0x0002,
            WM_MOVE = 0x0003,
            WM_SIZE = 0x0005,
            WM_ACTIVATE = 0x0006,
            WM_SETFOCUS = 0x0007,
            WM_KILLFOCUS = 0x0008,
            WM_ENABLE = 0x000a,
            WM_SETREDRAW = 0x000b,
            WM_SETTEXT = 0x000c,
            WM_GETTEXT = 0x000d,
            WM_GETTEXTLENGTH = 0x000e,
            WM_PAINT = 0x000f,
            WM_CLOSE = 0x0010,
            WM_QUERYENDSESSION = 0x0011,
            WM_QUIT = 0x0012,
            WM_QUERYOPEN = 0x0013,
            WM_ERASEBKGND = 0x0014,
            WM_SYSCOLORCHANGE = 0x0015,
            WM_ENDSESSION = 0x0016,
            WM_SHOWWINDOW = 0x0018,
            WM_CTLCOLOR = 0x0019,
            WM_WININICHANGE = 0x001a,
            WM_DEVMODECHANGE = 0x001b,
            WM_ACTIVATEAPP = 0x001c,
            WM_FONTCHANGE = 0x001d,
            WM_TIMECHANGE = 0x001e,
            WM_CANCELMODE = 0x001f,
            WM_SETCURSOR = 0x0020,
            WM_MOUSEACTIVATE = 0x0021,
            WM_CHILDACTIVATE = 0x0022,
            WM_QUEUESYNC = 0x0023,
            WM_GETMINMAXINFO = 0x0024,
            WM_PAINTICON = 0x0026,
            WM_ICONERASEBKGND = 0x0027,
            WM_NEXTDLGCTL = 0x0028,
            WM_SPOOLERSTATUS = 0x002a,
            WM_DRAWITEM = 0x002b,
            WM_MEASUREITEM = 0x002c,
            WM_DELETEITEM = 0x002d,
            WM_VKEYTOITEM = 0x002e,
            WM_CHARTOITEM = 0x002f,
            WM_SETFONT = 0x0030,
            WM_GETFONT = 0x0031,
            WM_SETHOTKEY = 0x0032,
            WM_GETHOTKEY = 0x0033,
            WM_QUERYDRAGICON = 0x0037,
            WM_COMPAREITEM = 0x0039,
            WM_GETOBJECT = 0x003d,
            WM_COMPACTING = 0x0041,
            WM_COMMNOTIFY = 0x0044,
            WM_WINDOWPOSCHANGING = 0x0046,
            WM_WINDOWPOSCHANGED = 0x0047,
            WM_POWER = 0x0048,
            WM_COPYGLOBALDATA = 0x0049,
            WM_COPYDATA = 0x004a,
            WM_CANCELJOURNAL = 0x004b,
            WM_NOTIFY = 0x004e,
            WM_INPUTLANGCHANGEREQUEST = 0x0050,
            WM_INPUTLANGCHANGE = 0x0051,
            WM_TCARD = 0x0052,
            WM_HELP = 0x0053,
            WM_USERCHANGED = 0x0054,
            WM_NOTIFYFORMAT = 0x0055,
            WM_CONTEXTMENU = 0x007b,
            WM_STYLECHANGING = 0x007c,
            WM_STYLECHANGED = 0x007d,
            WM_DISPLAYCHANGE = 0x007e,
            WM_GETICON = 0x007f,
            WM_SETICON = 0x0080,
            WM_NCCREATE = 0x0081,
            WM_NCDESTROY = 0x0082,
            WM_NCCALCSIZE = 0x0083,
            WM_NCHITTEST = 0x0084,
            WM_NCPAINT = 0x0085,
            WM_NCACTIVATE = 0x0086,
            WM_GETDLGCODE = 0x0087,
            WM_SYNCPAINT = 0x0088,
            WM_NCMOUSEMOVE = 0x00a0,
            WM_NCLBUTTONDOWN = 0x00A1,
            WM_NCLBUTTONUP = 0x00A2,
            WM_NCLBUTTONDBLCLK = 0x00a3,
            WM_NCRBUTTONDOWN = 0x00a4,
            WM_NCRBUTTONUP = 0x00a5,
            WM_NCRBUTTONDBLCLK = 0x00a6,
            WM_NCMBUTTONDOWN = 0x00a7,
            WM_NCMBUTTONUP = 0x00a8,
            WM_NCMBUTTONDBLCLK = 0x00a9,
            WM_NCXBUTTONDOWN = 0x00ab,
            WM_NCXBUTTONUP = 0x00ac,
            WM_NCXBUTTONDBLCLK = 0x00ad,
            SBM_SETPOS = 0x00e0,
            SBM_GETPOS = 0x00e1,
            SBM_SETRANGE = 0x00e2,
            SBM_GETRANGE = 0x00e3,
            SBM_ENABLE_ARROWS = 0x00e4,
            SBM_SETRANGEREDRAW = 0x00e6,
            SBM_SETSCROLLINFO = 0x00e9,
            SBM_GETSCROLLINFO = 0x00ea,
            SBM_GETSCROLLBARINFO = 0x00eb,
            WM_INPUT = 0x00ff,
            WM_KEYDOWN = 0x0100,
            WM_KEYFIRST = 0x0100,
            WM_KEYUP = 0x0101,
            WM_CHAR = 0x0102,
            WM_DEADCHAR = 0x0103,
            WM_SYSKEYDOWN = 0x0104,
            WM_SYSKEYUP = 0x0105,
            WM_SYSCHAR = 0x0106,
            WM_SYSDEADCHAR = 0x0107,
            WM_KEYLAST = 0x0108,
            WM_WNT_CONVERTREQUESTEX = 0x0109,
            WM_CONVERTREQUEST = 0x010a,
            WM_CONVERTRESULT = 0x010b,
            WM_INTERIM = 0x010c,
            WM_IME_STARTCOMPOSITION = 0x010d,
            WM_IME_ENDCOMPOSITION = 0x010e,
            WM_IME_COMPOSITION = 0x010f,
            WM_IME_KEYLAST = 0x010f,
            WM_INITDIALOG = 0x0110,
            WM_COMMAND = 0x0111,
            WM_SYSCOMMAND = 0x0112,
            WM_TIMER = 0x0113,
            WM_HSCROLL = 0x0114,
            WM_VSCROLL = 0x0115,
            WM_INITMENU = 0x0116,
            WM_INITMENUPOPUP = 0x0117,
            WM_SYSTIMER = 0x0118,
            WM_MENUSELECT = 0x011f,
            WM_MENUCHAR = 0x0120,
            WM_ENTERIDLE = 0x0121,
            WM_MENURBUTTONUP = 0x0122,
            WM_MENUDRAG = 0x0123,
            WM_MENUGETOBJECT = 0x0124,
            WM_UNINITMENUPOPUP = 0x0125,
            WM_MENUCOMMAND = 0x0126,
            WM_CHANGEUISTATE = 0x0127,
            WM_UPDATEUISTATE = 0x0128,
            WM_QUERYUISTATE = 0x0129,
            WM_CTLCOLORMSGBOX = 0x0132,
            WM_CTLCOLOREDIT = 0x0133,
            WM_CTLCOLORLISTBOX = 0x0134,
            WM_CTLCOLORBTN = 0x0135,
            WM_CTLCOLORDLG = 0x0136,
            WM_CTLCOLORSCROLLBAR = 0x0137,
            WM_CTLCOLORSTATIC = 0x0138,
            WM_MOUSEFIRST = 0x0200,
            WM_MOUSEMOVE = 0x0200,
            WM_LBUTTONDOWN = 0x0201,
            WM_LBUTTONUP = 0x0202,
            WM_LBUTTONDBLCLK = 0x0203,
            WM_RBUTTONDOWN = 0x0204,
            WM_RBUTTONUP = 0x0205,
            WM_RBUTTONDBLCLK = 0x0206,
            WM_MBUTTONDOWN = 0x0207,
            WM_MBUTTONUP = 0x0208,
            WM_MBUTTONDBLCLK = 0x0209,
            WM_MOUSELAST = 0x0209,
            WM_MOUSEWHEEL = 0x020a,
            WM_XBUTTONDOWN = 0x020b,
            WM_XBUTTONUP = 0x020c,
            WM_XBUTTONDBLCLK = 0x020d,
            WM_PARENTNOTIFY = 0x0210,
            WM_ENTERMENULOOP = 0x0211,
            WM_EXITMENULOOP = 0x0212,
            WM_NEXTMENU = 0x0213,
            WM_SIZING = 0x0214,
            WM_CAPTURECHANGED = 0x0215,
            WM_MOVING = 0x0216,
            WM_POWERBROADCAST = 0x0218,
            WM_DEVICECHANGE = 0x0219,
            WM_MDICREATE = 0x0220,
            WM_MDIDESTROY = 0x0221,
            WM_MDIACTIVATE = 0x0222,
            WM_MDIRESTORE = 0x0223,
            WM_MDINEXT = 0x0224,
            WM_MDIMAXIMIZE = 0x0225,
            WM_MDITILE = 0x0226,
            WM_MDICASCADE = 0x0227,
            WM_MDIICONARRANGE = 0x0228,
            WM_MDIGETACTIVE = 0x0229,
            WM_MDISETMENU = 0x0230,
            WM_ENTERSIZEMOVE = 0x0231,
            WM_EXITSIZEMOVE = 0x0232,
            WM_DROPFILES = 0x0233,
            WM_MDIREFRESHMENU = 0x0234,
            WM_IME_REPORT = 0x0280,
            WM_IME_SETCONTEXT = 0x0281,
            WM_IME_NOTIFY = 0x0282,
            WM_IME_CONTROL = 0x0283,
            WM_IME_COMPOSITIONFULL = 0x0284,
            WM_IME_SELECT = 0x0285,
            WM_IME_CHAR = 0x0286,
            WM_IME_REQUEST = 0x0288,
            WM_IMEKEYDOWN = 0x0290,
            WM_IME_KEYDOWN = 0x0290,
            WM_IMEKEYUP = 0x0291,
            WM_IME_KEYUP = 0x0291,
            WM_NCMOUSEHOVER = 0x02a0,
            WM_MOUSEHOVER = 0x02a1,
            WM_NCMOUSELEAVE = 0x02a2,
            WM_MOUSELEAVE = 0x02a3,
            WM_CUT = 0x0300,
            WM_COPY = 0x0301,
            WM_PASTE = 0x0302,
            WM_CLEAR = 0x0303,
            WM_UNDO = 0x0304,
            WM_RENDERFORMAT = 0x0305,
            WM_RENDERALLFORMATS = 0x0306,
            WM_DESTROYCLIPBOARD = 0x0307,
            WM_DRAWCLIPBOARD = 0x0308,
            WM_PAINTCLIPBOARD = 0x0309,
            WM_VSCROLLCLIPBOARD = 0x030a,
            WM_SIZECLIPBOARD = 0x030b,
            WM_ASKCBFORMATNAME = 0x030c,
            WM_CHANGECBCHAIN = 0x030d,
            WM_HSCROLLCLIPBOARD = 0x030e,
            WM_QUERYNEWPALETTE = 0x030f,
            WM_PALETTEISCHANGING = 0x0310,
            WM_PALETTECHANGED = 0x0311,
            WM_HOTKEY = 0x0312,
            WM_PRINT = 0x0317,
            WM_PRINTCLIENT = 0x0318,
            WM_APPCOMMAND = 0x0319,
            WM_HANDHELDFIRST = 0x0358,
            WM_HANDHELDLAST = 0x035f,
            WM_AFXFIRST = 0x0360,
            WM_AFXLAST = 0x037f,
            WM_PENWINFIRST = 0x0380,
            WM_RCRESULT = 0x0381,
            WM_HOOKRCRESULT = 0x0382,
            WM_GLOBALRCCHANGE = 0x0383,
            WM_PENMISCINFO = 0x0383,
            WM_SKB = 0x0384,
            WM_HEDITCTL = 0x0385,
            WM_PENCTL = 0x0385,
            WM_PENMISC = 0x0386,
            WM_CTLINIT = 0x0387,
            WM_PENEVENT = 0x0388,
            WM_PENWINLAST = 0x038f,
            DDM_SETFMT = 0x0400,
            DM_GETDEFID = 0x0400,
            NIN_SELECT = 0x0400,
            TBM_GETPOS = 0x0400,
            WM_PSD_PAGESETUPDLG = 0x0400,
            WM_USER = 0x0400,
            CBEM_INSERTITEMA = 0x0401,
            DDM_DRAW = 0x0401,
            DM_SETDEFID = 0x0401,
            HKM_SETHOTKEY = 0x0401,
            PBM_SETRANGE = 0x0401,
            RB_INSERTBANDA = 0x0401,
            SB_SETTEXTA = 0x0401,




            WM_DWMCOMPOSITIONCHANGED = 0x31e

        }

        /// <summary>
        /// Window Styles(WinUser.h)
        /// </summary>
        public static class WindowStyles
        {
            /*
     * Window Styles
     */
            public static readonly Int32


                 GWL_EXSTYLE = -20,
                 GWL_STYLE = -16,
                 WS_OVERLAPPED = 0x00000000,
                 WS_POPUP = 0x800000,
                 WS_CHILD = 0x40000000,
                 WS_MINIMIZE = 0x20000000,
                 WS_VISIBLE = 0x10000000,
                 WS_DISABLED = 0x08000000,
                 WS_CLIPSIBLINGS = 0x04000000,
                 WS_CLIPCHILDREN = 0x02000000,
                 WS_MAXIMIZE = 0x01000000,
                 WS_CAPTION = 0x00C00000,
                 WS_BORDER = 0x00800000,
                 WS_DLGFRAME = 0x00400000,
                 WS_VSCROLL = 0x00200000,
                 WS_HSCROLL = 0x00100000,
                 WS_SYSMENU = 0x00080000,
                 WS_THICKFRAME = 0x00040000,
                 WS_GROUP = 0x00020000,
                 WS_TABSTOP = 0x00010000,
                 WS_MINIMIZEBOX = 0x00020000,
                 WS_MAXIMIZEBOX = 0x00010000,
                 WS_TILED = WS_OVERLAPPED,
                 WS_ICONIC = WS_MINIMIZE,
                 WS_SIZEBOX = WS_THICKFRAME,
                 WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW,

                 /*
                  * Common Window Styles
                  */
                 WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED |
                                       WS_CAPTION |
                                       WS_SYSMENU |
                                       WS_THICKFRAME |
                                       WS_MINIMIZEBOX |
                                       WS_MAXIMIZEBOX),

                 WS_POPUPWINDOW = (WS_POPUP |
                                      WS_BORDER |
                                      WS_SYSMENU),

                 WS_CHILDWINDOW = (WS_CHILD),

                 /*
                  * Extended Window Styles
                  */
                 WS_EX_DLGMODALFRAME = 0x00000001,
                 WS_EX_NOPARENTNOTIFY = 0x00000004,
                 WS_EX_TOPMOST = 0x00000008,
                 WS_EX_ACCEPTFILES = 0x00000010,
                 WS_EX_TRANSPARENT = 0x00000020,

                 WS_EX_MDICHILD = 0x00000040,
                 WS_EX_TOOLWINDOW = 0x00000080,
                 WS_EX_WINDOWEDGE = 0x00000100,
                 WS_EX_CLIENTEDGE = 0x00000200,
                 WS_EX_CONTEXTHELP = 0x00000400,
                 WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE),
                 WS_EX_STATICEDGE = 0x00020000,
                 WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST);
        }
        [StructLayout(LayoutKind.Sequential)]
        public struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
            public int Width { get { return Right - Left; } }
            public int Height { get { return Bottom - Top; } }
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct WINDOWPOSPARAMS
        {
            public System.IntPtr hwnd;
            public System.IntPtr hwndInsertAfter;
            public int x;
            public int y;
            public int cx;
            public int cy;
            public int flags;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct MARGINS
        {
            public int cxLeftWidth;
            public int cxRightWidth;
            public int cyTopHeight;
            public int cyBottomHeight;
        }

        [Flags]
        public enum SWP
        {
            ASYNCWINDOWPOS = 0x4000,
            DEFERERASE = 0x2000,
            DRAWFRAME = 0x20,
            FRAMECHANGED = 0x20,
            HIDEWINDOW = 0x80,
            NOACTIVATE = 0x10,
            NOCOPYBITS = 0x100,
            NOMOVE = 2,
            NOOWNERZORDER = 0x200,
            NOREDRAW = 8,
            NOREPOSITION = 0x200,
            NOSENDCHANGING = 0x400,
            NOSIZE = 1,
            NOZORDER = 4,
            SHOWWINDOW = 0x40
        }

        public enum HT
        {
            BORDER = 0x12,
            BOTTOM = 15,
            BOTTOMLEFT = 0x10,
            BOTTOMRIGHT = 0x11,
            CAPTION = 2,
            CLIENT = 1,
            CLOSE = 20,
            ERROR = -2,
            GROWBOX = 4,
            HELP = 0x15,
            HSCROLL = 6,
            LEFT = 10,
            MAXBUTTON = 9,
            MENU = 5,
            MINBUTTON = 8,
            NOWHERE = 0,
            OBJECT = 0x13,
            RIGHT = 11,
            SYSMENU = 3,
            TOP = 12,
            TOPLEFT = 13,
            TOPRIGHT = 14,
            TRANSPARENT = -1,
            VSCROLL = 7,
            MONITOR_DEFAULTTONEAREST = 0x00000002
        }

        [StructLayout(LayoutKind.Sequential)]
        public class POINT
        {
            public int x = 0;
            public int y = 0;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct MINMAXINFO
        {
            public POINT ptReserved;
            public POINT ptMaxSize;
            public POINT ptMaxPosition;
            public POINT ptMinTrackSize;
            public POINT ptMaxTrackSize;
        };

        /// <summary>
        /// </summary>
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public class MONITORINFO
        {
            /// <summary>
            /// </summary>            
            public int cbSize = Marshal.SizeOf(typeof(MONITORINFO));

            /// <summary>
            /// </summary>            
            public RECT rcMonitor = new RECT();

            /// <summary>
            /// </summary>            
            public RECT rcWork = new RECT();

            /// <summary>
            /// </summary>            
            public int dwFlags = 0;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct NCCALCSIZE_PARAMS
        {
            public RECT rect0, rect1, rect2;
            public IntPtr lppos;
        }
    }


}
